<?php
namespace app\php\controller;  // 必须继承于app 第二个是具体的应用名  例 t5/note/tp
use think\Controller;
//use think\Request;
use think\config;
use think\Db;

class Indexexcel extends Controller
{

	/***
	 * 验证引入了excel
	 */
	public function index(){
		echo 'note/php/indexexcle';
	Vendor('PHPExcel.PHPExcel');
$mod = new \PHPExcel;   // 注意反斜杠
$mod->yanzheng();
}
/**
 * 创建 excel 方法一
 */
public function index1(){
	$dir = dirname(__FILE__); //自动获得当前路径
	Vendor('PHPExcel.PHPExcel');
    $objPHPExcel = new \PHPExcel;   // 注意反斜杠
	$objSheet = $objPHPExcel->getActiveSheet(); // 获得操作对象
	$objSheet->setTitle('demo');  // 名称
	$objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数");  //填充数据
	$objSheet->setCellValue("A2","菜红")->setCellValue("B2","82");  //填充数据
	$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel5");  //生成excel文件 <span style="">注意有\反斜杠 </span>
	$objWriter->save($dir."/demo.xlsx");
	echo '文件已创建在 note/php/controller 下';
	$this->index2();
}

public function index2(){
	echo'
	<hr/>
	<pre>
	$dir = dirname(__FILE__); //自动获得当前路径
	Vendor(\'PHPExcel.PHPExcel\');
    $objPHPExcel = new \PHPExcel;   // 注意反斜杠
	$objSheet = $objPHPExcel->getActiveSheet(); // 获得操作对象
	$objSheet->setTitle(\'demo\');  // 名称
	$objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数");  //填充数据
	$objSheet->setCellValue("A2","菜红")->setCellValue("B2","82");  //填充数据
	$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel5");  //生成excel文件 <span style="">注意有\反斜杠 </span>
	$objWriter->save($dir."/demo.xlsx");
	</pre>
	';
}

/**
 * 创建 excel 方法二
 */
public function index3(){
	$dir = dirname(__FILE__); //自动获得当前路径
	Vendor('PHPExcel.PHPExcel');
    $objPHPExcel = new \PHPExcel;   // 注意反斜杠
	$objSheet = $objPHPExcel->getActiveSheet(); // 获得操作对象
	$objSheet->setTitle('demo');  // 名称
	$array = array(
		 array(),     // 空出第一行
		 array('','姓名','分数'),  //空出第一列
		 array('','李四','28'),
		 array('','王五','128'), 
	); 
	$objSheet->fromArray($array); //直接加载数据
	$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel5");  //生成excel文件 <span style="">注意有\反斜杠 </span>
	$objWriter->save($dir."/demo.xlsx");
	echo '文件已创建在 note/php/controller 下';
	$this->index4();
}

public function index4(){
	echo'
	<hr/>
	<pre>
	$dir = dirname(__FILE__); //自动获得当前路径
	Vendor(\'PHPExcel.PHPExcel\');
    $objPHPExcel = new \PHPExcel;   // 注意反斜杠
	$objSheet = $objPHPExcel->getActiveSheet(); // 获得操作对象
	$objSheet->setTitle(\'demo\');  // 名称
	$array = array(
		 array(),     // 空出第一行
		 array(\'\',\'姓名\',\'分数\'),  //空出第一列
		 array(\'\',\'李四\',\'28\'),
		 array(\'\',\'王五\',\'128\'), 
	); 
	$objSheet->fromArray($array); //直接加载数据
	$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel5");  //生成excel文件 <span style="">注意有\反斜杠 </span>
	$objWriter->save($dir."/demo.xlsx");
	echo \'文件已创建在 note/php/controller 下\';
	</pre>
	';
	
}

/**
 * 从数据库获得数据，创建excel
 */

public function index5(){
	$dir = dirname(__FILE__); //自动获得当前路径
	Vendor('PHPExcel.PHPExcel');
    $objPHPExcel = new \PHPExcel;   // 注意反斜杠
	$objSheet = $objPHPExcel->getActiveSheet(); // 获得操作对象
	for($i=1;$i<=4;$i++){     //把thinkphp的 55 56 57 58 小项 重编为3个工作表
	
		if($i>1){
			$objPHPExcel->createSheet();//创建新的内置表 默认初始化时就已经有一个工作表了
		}
		$objPHPExcel->setActiveSheetIndex($i-1);//把新创建的sheet设定为当前活动sheet 下标要减1
		$objSheet=$objPHPExcel->getActiveSheet();//获取当前活动sheet.
		$j = $i+54;  //查询thinkphp的第 55 56 57项
		$objSheet->setTitle("第".$j."项");//给当前工作表起个名称 拼接成工作表名称 如 第55项 第56项
		$data = $this->getdata($j);  //查询数据库
	    //	dump($data);
	    $objSheet->setCellValue("A1","id")->setCellValue("B1","内容")->setCellValue("C1","address");//填充数据
		$j=2;
		foreach($data as $key=>$val){
				$objSheet->setCellValue("A".$j,$val['id'])->setCellValue("B".$j,$val['content'])->setCellValue("C".$j,$val['address']."班");
				$j++;
		}
	}
	$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel5");  //生成excel文件 <span style="">注意有\反斜杠 </span>
	$objWriter->save($dir."/demo.xlsx");
	echo '文件已创建在 note/php/controller 下';
	$this->index6();
}

public function index6(){
	echo'
	<hr/>
	<pre>
	$dir = dirname(__FILE__); //自动获得当前路径
	Vendor(\'PHPExcel.PHPExcel\');
    $objPHPExcel = new \PHPExcel;   // 注意反斜杠
	$objSheet = $objPHPExcel->getActiveSheet(); // 获得操作对象
	for($i=1;$i<=4;$i++){     //把thinkphp的 55 56 57 58 小项 重编为3个工作表
	
		if($i>1){
			$objPHPExcel->createSheet();//创建新的内置表 默认初始化时就已经有一个工作表了
		}
		$objPHPExcel->setActiveSheetIndex($i-1);//把新创建的sheet设定为当前活动sheet 下标要减1
		$objSheet=$objPHPExcel->getActiveSheet();//获取当前活动sheet.
		$j = $i+54;  //查询thinkphp的第 55 56 57项
		$objSheet->setTitle("第".$j."项");//给当前工作表起个名称 拼接成工作表名称 如 第55项 第56项
		$data = $this->getdata($j);  //查询数据库
	    //	dump($data);
	    $objSheet->setCellValue("A1","id")->setCellValue("B1","内容")->setCellValue("C1","address");//填充数据
		$j=2;
		foreach($data as $key=>$val){
				$objSheet->setCellValue("A".$j,$val[\'id\'])->setCellValue("B".$j,$val[\'content\'])->setCellValue("C".$j,$val[\'address\']."班");
				$j++;
		}
	}
	$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel5");  //生成excel文件 <span style="">注意有\反斜杠 </span>
	$objWriter->save($dir."/demo.xlsx");
	echo \'文件已创建在 note/php/controller 下\';
	<br/><br/><br/>
	<hr/>
	echo \数据库部分\';
	public function getdata($i){
		$table = \'note_listt\';
		$where[\'superior\'] = $i; 
		 $res = Db::table($table)->where($where)->select();	
		// dump($res);	
		// echo Db::table(\'note_test\')->getlastsql();  // model 下获得最后一条sql
	  return $res;

	</pre>
	';
}

/**
 * 从数据库调数据 创建多张工作表 可以在浏览器打开 或者下载到指定地方 
 */
public function index7(){
	
	$dir = dirname(__FILE__); //自动获得当前路径
	Vendor('PHPExcel.PHPExcel');
    $objPHPExcel = new \PHPExcel;   // 注意反斜杠
	$objSheet = $objPHPExcel->getActiveSheet(); // 获得操作对象
	for($i=1;$i<=4;$i++){     //把thinkphp的 55 56 57 58 小项 重编为3个工作表
	
		if($i>1){
			$objPHPExcel->createSheet();//创建新的内置表 默认初始化时就已经有一个工作表了
		}
		$objPHPExcel->setActiveSheetIndex($i-1);//把新创建的sheet设定为当前活动sheet 下标要减1
		$objSheet=$objPHPExcel->getActiveSheet();//获取当前活动sheet.
		$j = $i+54;  //查询thinkphp的第 55 56 57项
		$objSheet->setTitle("第".$j."项");//给当前工作表起个名称 拼接成工作表名称 如 第55项 第56项
		$data = $this->getdata($j);  //查询数据库
	    //	dump($data);
	    $objSheet->setCellValue("A1","id")->setCellValue("B1","内容")->setCellValue("C1","address");//填充数据
		$j=2;
		foreach($data as $key=>$val){
				$objSheet->setCellValue("A".$j,$val['id'])->setCellValue("B".$j,$val['content'])->setCellValue("C".$j,$val['address']."班");
				$j++;
		}
	}
	$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel5");  //生成excel文件 <span style="">注意有\反斜杠 </span>
	$this->browser_export('Excel5','表名.xls');//输出到浏览器 写header 头
	
	$objWriter->save("php://output");

}
public function browser_export($type,$filename){
	if($type=="Excel5"){
		header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件
}else{
		header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件
}
header('Content-Disposition: attachment;filename="'.$filename.'"');//告诉浏览器将输出文件的名称
header('Cache-Control: max-age=0');//禁止缓存
}


public function index8(){
echo'
<hr/>
<pre>
只显示  "可以在浏览器打开 或者下载到指定地方" 部分
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel5");  //生成excel文件 <span style="">注意有\反斜杠 </span>
$this->browser_export(\'Excel5\',\'表名.xls\');//输出到浏览器 写header 头
$objWriter->save("php://output");

<br/><br/><br/><hr/>
public function browser_export($type,$filename){
	if($type=="Excel5"){
		header(\'Content-Type: application/vnd.ms-excel\');//告诉浏览器将要输出excel03文件
}else{
		header(\'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\');//告诉浏览器数据excel07文件
}
header(\'Content-Disposition: attachment;filename="\'.$filename.\'"\');//告诉浏览器将输出文件的名称
header(\'Cache-Control: max-age=0\');//禁止缓存
}
</pre>
';
}


/**
 * 读取excel文件 读大文件时 不可取
 */
public function index9(){
	header("Content-Type:text/html;charset=utf-8");
$dir=dirname(__FILE__);//找到当前脚本所在路径
require "../vendor/PHPExcel/PHPExcel/IOFactory.php";//引入读取excel的类文件
// Vendor('PHPExcel.PHPExcel.IOFactory');
$filename=$dir."/demo.xlsx";
dump($filename);
// $mod = new \PHPExcel_IOFactory;
$objPHPExcel=\PHPExcel_IOFactory::load($filename);
$sheetCount=$objPHPExcel->getSheetCount();//获取excel文件里有多少个sheet
$this->index10();
for($i=0;$i<$sheetCount;$i++){
	$data=$objPHPExcel->getSheet($i)->toArray();//读取每个sheet里的数据 全部放入到数组中
	dump($data);
}

}

public function index10(){
	echo'
	<hr/>
	<pre>
	header("Content-Type:text/html;charset=utf-8");
    $dir=dirname(__FILE__);//找到当前脚本所在路径
    require "../vendor/PHPExcel/PHPExcel/IOFactory.php";//引入读取excel的类文件
    // Vendor(\'PHPExcel.PHPExcel.IOFactory\');
    $filename=$dir."/demo.xlsx";
    dump($filename);
    // $mod = new \PHPExcel_IOFactory;
    $objPHPExcel=\PHPExcel_IOFactory::load($filename);   <span style="color:red">注意前面有反斜杠</span>
    $sheetCount=$objPHPExcel->getSheetCount();//获取excel文件里有多少个sheet
    for($i=0;$i<$sheetCount;$i++){
	$data=$objPHPExcel->getSheet($i)->toArray();//读取每个sheet里的数据 全部放入到数组中
	dump($data);
}
</pre>
<hr/>
';
}

/**
 * 读取excel文件 读大文件时 常用方法
 */
public function index11(){
	header("Content-Type:text/html;charset=utf-8");
$dir=dirname(__FILE__);//找到当前脚本所在路径
require "../vendor/PHPExcel/PHPExcel/IOFactory.php";//引入读取excel的类文件
// Vendor('PHPExcel.PHPExcel.IOFactory');
$filename=$dir."/demo.xlsx";
dump($filename);
// $mod = new \PHPExcel_IOFactory;
$objPHPExcel=\PHPExcel_IOFactory::load($filename);
foreach($objPHPExcel->getWorksheetIterator() as $sheet){//循环取sheet
	foreach($sheet->getRowIterator() as $row){//逐行处理
			if($row->getRowIndex()<2){
				continue;
			}
			foreach($row->getCellIterator() as $cell){//逐列读取
					$data=$cell->getValue();//获取单元格数据
					echo $data." ";
			}
			echo '<br/>';
	}
	echo '<br/>';
}
$this->index12();
}
public function index12(){
	echo'
	<hr/>
	<pre>
	header("Content-Type:text/html;charset=utf-8");
$dir=dirname(__FILE__);//找到当前脚本所在路径
require "../vendor/PHPExcel/PHPExcel/IOFactory.php";//引入读取excel的类文件
// Vendor(\'PHPExcel.PHPExcel.IOFactory\');
$filename=$dir."/demo.xlsx";
dump($filename);
// $mod = new \PHPExcel_IOFactory;
$objPHPExcel=\PHPExcel_IOFactory::load($filename); <span style="color:red">注意前面有反斜杠</span>
foreach($objPHPExcel->getWorksheetIterator() as $sheet){//循环取sheet
	foreach($sheet->getRowIterator() as $row){//逐行处理
			if($row->getRowIndex()<2){
				continue;
			}
			foreach($row->getCellIterator() as $cell){//逐列读取
					$data=$cell->getValue();//获取单元格数据
					echo $data." ";
			}
			echo \'<br/>\';
	}
	echo \'<br/>\';
}
<hr/>
</pre>
';
}

/**
 * 下面是model层
 */

 public function getdata($i){
	$table = 'note_listt';
	$where['superior'] = $i; 
	 $res = Db::table($table)->where($where)->select();	
	// dump($res);	
	// echo Db::table('note_test')->getlastsql();  // model 下获得最后一条sql
  return $res;
 }

}